package de.cms.kff.ctrl;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;

import de.cms.kff.dao.AutoDao;
import de.cms.kff.dao.DaoException;
import de.cms.kff.dao.VerleihDao;
import de.cms.kff.dao.MitarbeiterDao;
import de.cms.kff.model.Verleih;

@Controller
public class VerleihController {
	private VerleihDao verleihDao = null;
	private MitarbeiterDao mitarbeiterDao = null;
	private AutoDao autoDao = null;

	public void setVerleihDao(VerleihDao verleihDao) {
		this.verleihDao = verleihDao;
	}

	public void setMitarbeiterDao(MitarbeiterDao mitarbeiterDao) {
		this.mitarbeiterDao = mitarbeiterDao;
	}

	public void setAutoDao(AutoDao autoDao) {
		this.autoDao = autoDao;
	}

	/**
	 * <p>
	 * Searches for all {@link Verleih} objects and returns them in a
	 * <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AlleVerleihe.html'.
	 * </p>
	 */
	@RequestMapping(value = "/AlleVerleihe.html", method = RequestMethod.GET)
	public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		mv.addObject("title", "Verleihe");
		mv.addObject("message", "Übersicht über alle Ausleihen im Unternehmen.");
		mv.addObject("verleihe", verleihDao.findAllDTO());
		mv.setViewName("list-verleihe");
		return mv;
	}

	/**
	 * <p>
	 * Searches for all mitarbeiter {@link Verleih} objects and returns them in
	 * a <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AlleVerleihema.html'.
	 * </p>
	 */
	@RequestMapping(value = "/AlleVerleihema.html", method = RequestMethod.GET)
	public ModelAndView findAll1() {
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		mv.addObject("title", "Verleihe");
		mv.addObject("message", "Übersicht über alle Ausleihen im Unternehmen.");
		mv.addObject("verleihe", verleihDao.findAllDTO());
		mv.setViewName("list-verleihema");
		return mv;
	}

	/**
	 * <p>
	 * Create a Verleih.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/BeginneVerleih.html'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/BeginneVerleih.html", method = RequestMethod.GET)
	public ModelAndView beginneVerleih(@RequestParam(required = true) Integer id) {
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		mv.addObject("title", "Verleih eintragen");
		mv.addObject("message", "Tragen Sie hier den Fahrzeughalter ein.");
		mv.addObject("auto", autoDao.findById(id));
		mv.addObject("mitarbeiterList", mitarbeiterDao.findAll());
		mv.setViewName("edit-verleih");
		return mv;
	}

	/**
	 * <p>
	 * Saves a Verleih.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/SaveVerleih.html'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/SaveVerleih.html", method = RequestMethod.POST)
	public ModelAndView save(@RequestParam(required = true) Integer id,
			Integer mitarbeiterId, Integer kilometerstand) {
		try {
			verleihDao.verleihe(id, mitarbeiterId, kilometerstand);
			return new ModelAndView("redirect:AlleVerleihe.html");
		} catch (DaoException e) {
			ModelAndView mv = new ModelAndView("error");
			mv.addObject("message", e.getMessage());
			return mv;
		}
	}

	/**
	 * <p>
	 * Searches for {@link Verleih} objects that are not yet terminated and
	 * returns them in a <code>Collection</code>.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP GET and request '/AktuelleVerleihe.html'.
	 * </p>
	 */
	@RequestMapping(value = "/AktuelleVerleihe.html", method = RequestMethod.GET)
	public ModelAndView findAktuelle() {
		ModelAndView mv = new ModelAndView();
		Authentication auth = SecurityContextHolder.getContext().getAuthentication();
		mv.addObject("title", "Aktuelle Verleihe");
		mv.addObject(
				"message",
				"Alle Verleihe die noch nicht beendet sind. Klicken Sie auf das entsprechende Auto um die Ausleihe zu beenden.");
		mv.addObject("verleihe", verleihDao.findNichtBeendetDTO());
		mv.setViewName("list-verleihe");
		return mv;
	}

	/**
	 * <p>
	 * Terminates a Verleih.
	 * </p>
	 * 
	 * <p>
	 * Expected HTTP POST and request '/StopVerleih.html'.
	 * </p>
	 * 
	 * @return
	 */
	@RequestMapping(value = "/StopVerleih.html", method = RequestMethod.GET)
	public String save(@RequestParam(required = true) Integer id) {
		verleihDao.rueckgeben(id);
		return "redirect:AktuelleVerleihe.html";
	}

}
